﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using LogicaNegocio;
using Entidades;
using AccesoBD;

namespace PresentacionEscritorio
{
    public partial class frmConsultarPaciente : Form, IOpcion
    {
       

        private GestorTiposDocumento GTD = new GestorTiposDocumento();

        public frmConsultarPaciente()
        {
            InitializeComponent();
        }

        private string opElegida;

        public void setOpcion(string op)
        {
            opElegida = op;
        }

        public string getOpcion()
        {
            return opElegida;
        }

        private void frmConsultarPaciente_Load(object sender, EventArgs e)
        {
            cargarTipoDocumento();
            cargarGrilla();
            cmbTipoDocumento.SelectedIndex = -1;
        }

        private void cargarTipoDocumento()
        {

            if (GTD.obtenerTipoDocumento() == null)
            {
                MessageBox.Show("No estan cargados los Tipos de documentos");
            }
            else
            {
                cmbTipoDocumento.DataSource = GTD.obtenerTipoDocumento();
                cmbTipoDocumento.ValueMember = "Codigo";
                cmbTipoDocumento.DisplayMember = "Nombre";
            }


        }

        private void cargarGrilla()
        {
            grdBusquedaPaciente.AllowUserToAddRows = false;
            while (grdBusquedaPaciente.RowCount > 0)
            {
                grdBusquedaPaciente.Rows.Clear();

            }
            Pacientess pacientes = new Pacientess();
            List<Paciente> lis = new List<Paciente>();
            lis = pacientes.obtenerTodosPacientes();
            int i = 0;
            foreach (Paciente item in lis)
            {

                string tipoDocumento = "";
                tipoDocumento = pacientes.obtenerTipoDocumento(item.CodTipoDoc);
                if (item.foto != null)
                {
                    Image foto = item.foto;
                    Size s = new Size();
                    s.Width = 50;
                    s.Height = 50;
                    Bitmap bm = new Bitmap(foto, s);
                    grdBusquedaPaciente.Rows.Add(bm, item.Apellido, item.Nombre, tipoDocumento, item.NroDocumento, item.nroHC);
                    grdBusquedaPaciente.Rows[i].Height = 60;
                    i++;
                }
                else
                {
                    grdBusquedaPaciente.Rows.Add(null, item.Apellido, item.Nombre, tipoDocumento, item.NroDocumento, item.nroHC);
                    i++;
                }
            }

        }

        public void limpiar()
        {
            cmbTipoDocumento.SelectedIndex = -1;
            txtNroDocumento.Text = "";
            txtApellidoPaciente.Text = "";
            cargarGrilla();
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            Pacientess pacientes = new Pacientess();
            List<Paciente> p = new List<Paciente>();
            if (cmbTipoDocumento.SelectedIndex == -1 && txtNroDocumento.Text == "" && txtApellidoPaciente.Text == "")
            {
                MessageBox.Show("Debe completar algún campo de busqueda", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                if (cmbTipoDocumento.SelectedIndex > -1 && txtNroDocumento.Text == "" || cmbTipoDocumento.SelectedIndex == -1 && txtNroDocumento.Text != "")
                {
                    MessageBox.Show("Debe seleccionar tipo documento e ingresar número de documento juntos", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    int tipoDocumento = 0;
                    if (cmbTipoDocumento.SelectedIndex != -1)
                    {
                        tipoDocumento = Convert.ToInt32(cmbTipoDocumento.SelectedValue.ToString());
                    }
                    long nroDocumento = 0;
                    if (txtNroDocumento.Text != "")
                    {
                        nroDocumento = long.Parse(txtNroDocumento.Text);
                    }
                    string apellido = txtApellidoPaciente.Text;
                    p = pacientes.buscarConFiltros2(tipoDocumento, nroDocumento, apellido);
                    Boolean res = false;
                    int i = 0;
                    if (p.Count > 0)
                    {
                        while (grdBusquedaPaciente.RowCount > 0)
                        {
                            grdBusquedaPaciente.Rows.Clear();

                        }
                        foreach (Paciente item in p)
                        {
                            string tipDoc = "";
                            tipDoc = pacientes.obtenerTipoDocumento(item.CodTipoDoc);
                            if (item != null)
                            {

                                if (item.foto != null)
                                {
                                    Image foto = item.foto;
                                    Size s = new Size();
                                    s.Width = 50;
                                    s.Height = 50;
                                    Bitmap bm = new Bitmap(foto, s);
                                    grdBusquedaPaciente.Rows.Add(bm, item.Apellido, item.Nombre, tipDoc, item.NroDocumento, item.nroHC);
                                    grdBusquedaPaciente.Rows[i].Height = 60;
                                    i++;
                                }
                                else
                                {
                                    grdBusquedaPaciente.Rows.Add(null, item.Apellido, item.Nombre, tipDoc, item.NroDocumento, item.nroHC);
                                    i++;
                                }

                                res = true;
                            }


                        }
                        if (res == false)
                        {
                            MessageBox.Show("No se encontro el paciente", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            limpiar();
                        }
                    }
                    else
                    {
                        MessageBox.Show("No se encontro el paciente", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        limpiar();
                    }
                }
            }
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            limpiar();
        }

        private void txtNroDocumento_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtNúmeroHistoriaClinica_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtApellidoPaciente_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }

            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es una letra ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtNombrePaciente_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }

            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es una letra ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (grdBusquedaPaciente.SelectedRows.Count > 0)
            {
                Pacientess pacientes = new Pacientess();
                int nroHC = Convert.ToInt32(grdBusquedaPaciente.CurrentRow.Cells["nroHC"].Value.ToString());
                int idBusqueda = nroHC;
                frmRegistrarPaciente form = new frmRegistrarPaciente(idBusqueda);  
                form.FormClosed += new FormClosedEventHandler(form_FormClosed);
                form.ShowDialog();
                cargarGrilla();
            }
            else
            {
                MessageBox.Show("Debe seleccionar un paciente!", "Aviso", MessageBoxButtons.YesNo);
            }
        }
        private void form_FormClosed(object sender, FormClosedEventArgs e)
        {
            cargarGrilla();
        }
        private void btnCancelar_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("Seguro que desea salir?", "Aviso", MessageBoxButtons.YesNo);
            if (result == DialogResult.Yes)
                this.Close();
        }

        private void btnMostrarDatos_Click(object sender, EventArgs e)
        {
            if (grdBusquedaPaciente.SelectedRows.Count > 0)
            {
                Pacientess pacientes = new Pacientess();
                int nroHC = Convert.ToInt32(grdBusquedaPaciente.CurrentRow.Cells["nroHC"].Value.ToString());
                int idBusqueda = nroHC;
                frmMostrarDatosPaciente frm = new frmMostrarDatosPaciente(idBusqueda);
                frm.Show();
                cargarGrilla();
            }
            else
            {
                MessageBox.Show("Debe seleccionar un paciente!", "Aviso", MessageBoxButtons.YesNo);
            }
        }


    }
}
